package com.maven.mybatis.Mapper;


import com.maven.mybatis.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

// 这个类使用 xml 的方式 来实现 持久层的操作
// 这个类 只 做方法的 声明
// 实现在 resoruce 文件的 mapper 的 xml文件实现

@Mapper
public interface UserXmlMapper {
    // 增
    Integer insert(UserInfo userInfo) ;

    // 删
    Integer deleteById(Integer id);

    // 改
    Integer update(String password, Integer id);

    // 查 : 这里需要注意 ：我们 还需要 将 返回的类型 所在的路径 写出来
    // 相同的 ： 这里 的问题 与 注解 的相同，解决方法也相同
    List<UserInfo> selectAll();


    // # 与 $ 的区别
    UserInfo select2(Integer id);
    // 当我们使用 $ 进行 数据的输入的时候， 实际上是 字符串拼接，
    // 我们使用 $ 的 结果：select username,password,age from userinfo where username = 小李子
    // 实际正确的是：select username,password,age from userinfo where username = '小李子'
    // 但是由于 拼接的之后 的sql语句 实际上需要加上 '' ，所以导致报错
    // 或者我们 可以手动加入 where username = '${username }'
    UserInfo select3(String username);

    // # 与 $ 的区别：
    // 1. 首先 # 是预编译 的，而 $ 是 字符串直接 替换的
    // 2. $ 是存在 sql 注入的问题的 ： 当我们传入的 数据 不仅仅是 我们需要的内容时：我们仅仅需要（username ），但是我们传入的是 （username;其他的sql操作）
    // 3. # 的性能更高
    // 4. $ 更适用于 那些 不需要加 '' 的场景，如： 升降序



    // 模糊查询：like
    List<UserInfo> selectByLike(String name);
    // 使用 $ : like '%${username}%'
    //  由于 $ 的sql 注入问题 ，我们可以使用 mybatis 内置的方法 like concat('%','${name}','%')
    // 使用 # : like #{%username%}





    // 简单操作做完了
    // 现在来看看 一些 xml 中的标签

    // if 标签 和 trom 标签
    Integer insertIF(UserInfo userInfo);


    // where 标签:
    List<UserInfo> selectWhere(UserInfo userInfo);


    // set 标签 ：
    Integer updateByset(String phone,Integer id);


    // foreach 标签： 进行批量类似操作的时候
    Integer deleteForEach(List<Integer> ids);


    // include 标签 配合sql 标签进行使用
/*    <sql id="clows">  // 这里的 id 就相当于是 给下面的数据起的别名
            username,password,age
      </sql>
      <select id="select2" resultType="com.maven.mybatis.model.UserInfo">
            select <include refid="clows"></include>       // include 在这里使用别名
            from userinfo where id = #{id }
      </select>
   */

}
